home *** CD-ROM | disk | FTP | other *** search
/ MacAddict 83 / MacAddict_083_2003-07.iso / mac / Software / Development / VLC Source 0.5.3.dmg / include / vlc_common.h < prev    next >
C/C++ Source or Header  |  2003-04-07  |  27KB  |  707 lines

  1. /*****************************************************************************
  2.  * common.h: common definitions
  3.  * Collection of useful common types and macros definitions
  4.  *****************************************************************************
  5.  * Copyright (C) 1998, 1999, 2000 VideoLAN
  6.  * $Id: vlc_common.h,v 1.59 2003/03/17 18:02:11 sam Exp $
  7.  *
  8.  * Authors: Samuel Hocevar <sam@via.ecp.fr>
  9.  *          Vincent Seguin <seguin@via.ecp.fr>
  10.  *          Gildas Bazin <gbazin@netcourrier.com>
  11.  *
  12.  * This program is free software; you can redistribute it and/or modify
  13.  * it under the terms of the GNU General Public License as published by
  14.  * the Free Software Foundation; either version 2 of the License, or
  15.  * (at your option) any later version.
  16.  *
  17.  * This program is distributed in the hope that it will be useful,
  18.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  * GNU General Public License for more details.
  21.  *
  22.  * You should have received a copy of the GNU General Public License
  23.  * along with this program; if not, write to the Free Software
  24.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  25.  *****************************************************************************/
  26.  
  27. /*****************************************************************************
  28.  * Required vlc headers
  29.  *****************************************************************************/
  30. #if defined( __BORLANDC__ )
  31. #   undef PACKAGE
  32. #endif
  33.  
  34. #include "config.h"
  35.  
  36. #if defined( __BORLANDC__ )
  37. #   undef HAVE_VARIADIC_MACROS
  38. #   undef HAVE_STDINT_H
  39. #   undef HAVE_INTTYPES_H
  40. #   undef off_t
  41. #endif
  42.  
  43. #include "vlc_config.h"
  44. #include "modules_inner.h"
  45.  
  46. /*****************************************************************************
  47.  * Required system headers
  48.  *****************************************************************************/
  49. #ifdef HAVE_STRING_H
  50. #   include <string.h>                                         /* strerror() */
  51. #endif
  52.  
  53. #ifdef HAVE_SYS_TYPES_H
  54. #   include <sys/types.h>
  55. #endif
  56.  
  57. /*****************************************************************************
  58.  * Basic types definitions
  59.  *****************************************************************************/
  60. #if defined( HAVE_STDINT_H )
  61. #   include <stdint.h>
  62. #elif defined( HAVE_INTTYPES_H )
  63. #   include <inttypes.h>
  64. #elif defined( SYS_CYGWIN )
  65. #   include <sys/types.h>
  66.     /* Cygwin only defines half of these... */
  67.     typedef u_int8_t            uint8_t;
  68.     typedef u_int16_t           uint16_t;
  69.     typedef u_int32_t           uint32_t;
  70.     typedef u_int64_t           uint64_t;
  71. #else
  72.     /* Fallback types (very x86-centric, sorry) */
  73.     typedef unsigned char       uint8_t;
  74.     typedef signed char         int8_t;
  75.     typedef unsigned short      uint16_t;
  76.     typedef signed short        int16_t;
  77.     typedef unsigned int        uint32_t;
  78.     typedef signed int          int32_t;
  79. #   if defined( _MSC_VER ) \
  80.       || defined( UNDER_CE ) \
  81.       || ( defined( WIN32 ) && !defined( __MINGW32__ ) )
  82.     typedef unsigned __int64    uint64_t;
  83.     typedef signed __int64      int64_t;
  84. #   else
  85.     typedef unsigned long long  uint64_t;
  86.     typedef signed long long    int64_t;
  87. #   endif
  88. #endif
  89.  
  90. typedef uint8_t                 byte_t;
  91.  
  92. /* ptrdiff_t definition */
  93. #ifdef HAVE_STDDEF_H
  94. #   include <stddef.h>
  95. #else
  96. #   include <malloc.h>
  97. #   ifndef _PTRDIFF_T
  98. #       define _PTRDIFF_T
  99. /* Not portable in a 64-bit environment. */
  100. typedef int                 ptrdiff_t;
  101. #   endif
  102. #endif
  103.  
  104. #if defined( WIN32 )
  105. #   include <malloc.h>
  106. #endif
  107.  
  108. #if defined( WIN32 ) || defined( UNDER_CE )
  109. typedef int                 ssize_t;
  110. #endif
  111.  
  112. /* Counter for statistics and profiling */
  113. typedef unsigned long       count_t;
  114.  
  115. /* DCT elements types */
  116. typedef int16_t             dctelem_t;
  117.  
  118. /* Video buffer types */
  119. typedef uint8_t             yuv_data_t;
  120.  
  121. /* Audio volume */
  122. typedef uint16_t            audio_volume_t;
  123.  
  124. #ifndef HAVE_SOCKLEN_T
  125. typedef int                 socklen_t;
  126. #endif
  127.  
  128. /*****************************************************************************
  129.  * Old types definitions
  130.  *****************************************************************************
  131.  * We still provide these types because most of the VLC code uses them
  132.  * instead of the C9x types. They should be removed when the transition is
  133.  * complete (probably in 10 years).
  134.  *****************************************************************************/
  135. typedef uint8_t    u8;
  136. typedef int8_t     s8;
  137. typedef uint16_t   u16;
  138. typedef int16_t    s16;
  139. typedef uint32_t   u32;
  140. typedef int32_t    s32;
  141. typedef uint64_t   u64;
  142. typedef int64_t    s64;
  143.  
  144. /*****************************************************************************
  145.  * mtime_t: high precision date or time interval
  146.  *****************************************************************************
  147.  * Store a high precision date or time interval. The maximum precision is the
  148.  * microsecond, and a 64 bits integer is used to avoid overflows (maximum
  149.  * time interval is then 292271 years, which should be long enough for any
  150.  * video). Dates are stored as microseconds since a common date (usually the
  151.  * epoch). Note that date and time intervals can be manipulated using regular
  152.  * arithmetic operators, and that no special functions are required.
  153.  *****************************************************************************/
  154. typedef int64_t mtime_t;
  155.  
  156. /*****************************************************************************
  157.  * The vlc_fourcc_t type.
  158.  *****************************************************************************
  159.  * See http://www.webartz.com/fourcc/ for a very detailed list.
  160.  *****************************************************************************/
  161. typedef uint32_t vlc_fourcc_t;
  162.  
  163. #ifdef WORDS_BIGENDIAN
  164. #   define VLC_FOURCC( a, b, c, d ) \
  165.         ( ((uint32_t)d) | ( ((uint32_t)c) << 8 ) \
  166.            | ( ((uint32_t)b) << 16 ) | ( ((uint32_t)a) << 24 ) )
  167. #   define VLC_TWOCC( a, b ) \
  168.         ( (uint16_t)(b) | ( (uint16_t)(a) << 8 ) )
  169.  
  170. #else
  171. #   define VLC_FOURCC( a, b, c, d ) \
  172.         ( ((uint32_t)a) | ( ((uint32_t)b) << 8 ) \
  173.            | ( ((uint32_t)c) << 16 ) | ( ((uint32_t)d) << 24 ) )
  174. #   define VLC_TWOCC( a, b ) \
  175.         ( (uint16_t)(a) | ( (uint16_t)(b) << 8 ) )
  176.  
  177. #endif
  178.  
  179. /*****************************************************************************
  180.  * Classes declaration
  181.  *****************************************************************************/
  182.  
  183. /* Internal types */
  184. typedef struct libvlc_t libvlc_t;
  185. typedef struct vlc_t vlc_t;
  186. typedef struct variable_t variable_t;
  187.  
  188. /* Messages */
  189. typedef struct msg_bank_t msg_bank_t;
  190. typedef struct msg_subscription_t msg_subscription_t;
  191.  
  192. /* Playlist */
  193. typedef struct playlist_t playlist_t;
  194. typedef struct playlist_item_t playlist_item_t;
  195.  
  196. /* Modules */
  197. typedef struct module_bank_t module_bank_t;
  198. typedef struct module_t module_t;
  199. typedef struct module_config_t module_config_t;
  200. typedef struct module_symbols_t module_symbols_t;
  201.  
  202. /* Interface */
  203. typedef struct intf_thread_t intf_thread_t;
  204. typedef struct intf_sys_t intf_sys_t;
  205. typedef struct intf_console_t intf_console_t;
  206. typedef struct intf_msg_t intf_msg_t;
  207. typedef struct intf_channel_t intf_channel_t;
  208.  
  209. /* Input */
  210. typedef struct input_thread_t input_thread_t;
  211. typedef struct input_channel_t input_channel_t;
  212. typedef struct input_area_t input_area_t;
  213. typedef struct input_buffers_t input_buffers_t;
  214. typedef struct input_socket_t input_socket_t;
  215. typedef struct input_info_t input_info_t;
  216. typedef struct input_info_category_t input_info_category_t;
  217. typedef struct access_sys_t access_sys_t;
  218. typedef struct demux_sys_t demux_sys_t;
  219. typedef struct es_descriptor_t es_descriptor_t;
  220. typedef struct es_sys_t es_sys_t;
  221. typedef struct pgrm_descriptor_t pgrm_descriptor_t;
  222. typedef struct pgrm_sys_t pgrm_sys_t;
  223. typedef struct stream_descriptor_t stream_descriptor_t;
  224. typedef struct stream_sys_t stream_sys_t;
  225.  
  226. /* Audio */
  227. typedef struct aout_instance_t aout_instance_t;
  228. typedef struct aout_sys_t aout_sys_t;
  229. typedef struct aout_fifo_t aout_fifo_t;
  230. typedef struct aout_input_t aout_input_t;
  231. typedef struct aout_buffer_t aout_buffer_t;
  232. typedef struct audio_sample_format_t audio_sample_format_t;
  233. typedef struct audio_date_t audio_date_t;
  234.  
  235. /* Video */
  236. typedef struct vout_thread_t vout_thread_t;
  237. typedef struct vout_font_t vout_font_t;
  238. typedef struct vout_sys_t vout_sys_t;
  239. typedef struct chroma_sys_t chroma_sys_t;
  240. typedef struct picture_t picture_t;
  241. typedef struct picture_sys_t picture_sys_t;
  242. typedef struct picture_heap_t picture_heap_t;
  243. typedef struct subpicture_t subpicture_t;
  244. typedef struct subpicture_sys_t subpicture_sys_t;
  245.  
  246. /* Stream output */
  247. typedef struct sout_instance_t sout_instance_t;
  248. typedef struct sout_fifo_t sout_fifo_t;
  249. typedef struct sout_input_t sout_input_t;
  250. typedef struct sout_packetizer_input_t sout_packetizer_input_t;
  251. typedef struct sout_buffer_t sout_buffer_t;
  252. typedef struct sout_packet_format_t sout_packet_format_t;
  253. typedef struct sout_access_out_t sout_access_out_t;
  254. typedef struct sout_mux_t sout_mux_t;
  255. typedef struct sout_access_out_sys_t sout_access_out_sys_t;
  256.  
  257. /* Decoders */
  258. typedef struct decoder_fifo_t decoder_fifo_t;
  259.  
  260. /* Misc */
  261. typedef struct data_packet_t data_packet_t;
  262. typedef struct data_buffer_t data_buffer_t;
  263. typedef struct stream_position_t stream_position_t;
  264. typedef struct stream_ctrl_t stream_ctrl_t;
  265. typedef struct pes_packet_t pes_packet_t;
  266. typedef struct bit_stream_t bit_stream_t;
  267. typedef struct network_socket_t network_socket_t;
  268. typedef struct iso639_lang_t iso639_lang_t;
  269.  
  270. /*****************************************************************************
  271.  * Variable callbacks
  272.  *****************************************************************************/
  273. typedef int ( * vlc_callback_t ) ( vlc_object_t *,      /* variable's object */
  274.                                    char const *,            /* variable name */
  275.                                    vlc_value_t,                 /* old value */
  276.                                    vlc_value_t,                 /* new value */
  277.                                    void * );                /* callback data */
  278.  
  279. /*****************************************************************************
  280.  * Plug-in stuff
  281.  *****************************************************************************/
  282. #ifndef __PLUGIN__
  283. #   define VLC_EXPORT( type, name, args ) type name args
  284. #else
  285. #   define VLC_EXPORT( type, name, args ) struct _u_n_u_s_e_d_
  286.     extern module_symbols_t* p_symbols;
  287. #endif
  288.  
  289. /*****************************************************************************
  290.  * OS-specific headers and thread types
  291.  *****************************************************************************/
  292. #if defined( WIN32 ) || defined( UNDER_CE )
  293. #   define WIN32_LEAN_AND_MEAN
  294. #   include <windows.h>
  295. #   define IS_WINNT ( GetVersion() < 0x80000000 )
  296. #endif
  297.  
  298. #include "vlc_threads.h"
  299.  
  300. /*****************************************************************************
  301.  * Common structure members
  302.  *****************************************************************************/
  303.  
  304. /* VLC_COMMON_MEMBERS : members common to all basic vlc objects */
  305. #define VLC_COMMON_MEMBERS                                                  \
  306.     int   i_object_id;                                                      \
  307.     int   i_object_type;                                                    \
  308.     char *psz_object_type;                                                  \
  309.     char *psz_object_name;                                                  \
  310.                                                                             \
  311.     /* Thread properties, if any */                                         \
  312.     vlc_bool_t   b_thread;                                                  \
  313.     vlc_thread_t thread_id;                                                 \
  314.                                                                             \
  315.     /* Object access lock */                                                \
  316.     vlc_mutex_t  object_lock;                                               \
  317.     vlc_cond_t   object_wait;                                               \
  318.                                                                             \
  319.     /* Object properties */                                                 \
  320.     volatile vlc_bool_t b_error;                    /* set by the object */ \
  321.     volatile vlc_bool_t b_die;                     /* set by the outside */ \
  322.     volatile vlc_bool_t b_dead;                     /* set by the object */ \
  323.     volatile vlc_bool_t b_attached;                 /* set by the object */ \
  324.                                                                             \
  325.     /* Object variables */                                                  \
  326.     vlc_mutex_t     var_lock;                                               \
  327.     int             i_vars;                                                 \
  328.     variable_t *    p_vars;                                                 \
  329.                                                                             \
  330.     /* Stuff related to the libvlc structure */                             \
  331.     libvlc_t *      p_libvlc;                        /* root of all evil */ \
  332.     vlc_t *         p_vlc;                     /* (root of all evil) - 1 */ \
  333.                                                                             \
  334.     volatile int    i_refcount;                           /* usage count */ \
  335.     vlc_object_t *  p_parent;                              /* our parent */ \
  336.     vlc_object_t ** pp_children;                         /* our children */ \
  337.     volatile int    i_children;                                             \
  338.                                                                             \
  339.     /* Private data */                                                      \
  340.     void *          p_private;                                              \
  341.                                                                             \
  342.     /* Just a reminder so that people don't cast garbage */                 \
  343.     int be_sure_to_add_VLC_COMMON_MEMBERS_to_struct;                        \
  344.  
  345. /* VLC_OBJECT: attempt at doing a clever cast */
  346. #define VLC_OBJECT( x ) \
  347.     ((vlc_object_t *)(x))+0*(x)->be_sure_to_add_VLC_COMMON_MEMBERS_to_struct
  348.  
  349. /*****************************************************************************
  350.  * Macros and inline functions
  351.  *****************************************************************************/
  352. #ifdef NTOHL_IN_SYS_PARAM_H
  353. #   include <sys/param.h>
  354.  
  355. #elif !defined(WIN32) && !defined( UNDER_CE )
  356. #   include <netinet/in.h>
  357.  
  358. #endif /* NTOHL_IN_SYS_PARAM_H || WIN32 */
  359.  
  360. /* CEIL: division with round to nearest greater integer */
  361. #define CEIL(n, d)  ( ((n) / (d)) + ( ((n) % (d)) ? 1 : 0) )
  362.  
  363. /* PAD: PAD(n, d) = CEIL(n ,d) * d */
  364. #define PAD(n, d)   ( ((n) % (d)) ? ((((n) / (d)) + 1) * (d)) : (n) )
  365.  
  366. /* __MAX and __MIN: self explanatory */
  367. #ifndef __MAX
  368. #   define __MAX(a, b)   ( ((a) > (b)) ? (a) : (b) )
  369. #endif
  370. #ifndef __MIN
  371. #   define __MIN(a, b)   ( ((a) < (b)) ? (a) : (b) )
  372. #endif
  373.  
  374. /* Dynamic array handling: realloc array, move data, increment position */
  375. #define INSERT_ELEM( p_ar, i_oldsize, i_pos, elem )                           \
  376.     do                                                                        \
  377.     {                                                                         \
  378.         if( i_oldsize )                                                       \
  379.         {                                                                     \
  380.             (p_ar) = realloc( p_ar, ((i_oldsize) + 1) * sizeof( *(p_ar) ) );  \
  381.         }                                                                     \
  382.         else                                                                  \
  383.         {                                                                     \
  384.             (p_ar) = malloc( ((i_oldsize) + 1) * sizeof( *(p_ar) ) );         \
  385.         }                                                                     \
  386.         memmove( (p_ar) + (i_pos) + 1,                                        \
  387.                  (p_ar) + (i_pos),                                            \
  388.                  ((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) );               \
  389.         (p_ar)[i_pos] = elem;                                                 \
  390.         (i_oldsize)++;                                                        \
  391.     }                                                                         \
  392.     while( 0 )
  393.  
  394. #define REMOVE_ELEM( p_ar, i_oldsize, i_pos )                                 \
  395.     do                                                                        \
  396.     {                                                                         \
  397.         memmove( (p_ar) + (i_pos),                                            \
  398.                  (p_ar) + (i_pos) + 1,                                        \
  399.                  ((i_oldsize) - (i_pos) - 1) * sizeof( *(p_ar) ) );           \
  400.         if( i_oldsize > 1 )                                                   \
  401.         {                                                                     \
  402.             (p_ar) = realloc( p_ar, ((i_oldsize) - 1) * sizeof( *(p_ar) ) );  \
  403.         }                                                                     \
  404.         else                                                                  \
  405.         {                                                                     \
  406.             free( p_ar );                                                     \
  407.             (p_ar) = NULL;                                                    \
  408.         }                                                                     \
  409.         (i_oldsize)--;                                                        \
  410.     }                                                                         \
  411.     while( 0 )
  412.  
  413.  
  414. /* MSB (big endian)/LSB (little endian) conversions - network order is always
  415.  * MSB, and should be used for both network communications and files. Note that
  416.  * byte orders other than little and big endians are not supported, but only
  417.  * the VAX seems to have such exotic properties. */
  418. static inline uint16_t U16_AT( void * _p )
  419. {
  420.     uint8_t * p = (uint8_t *)_p;
  421.     return ( ((uint16_t)p[0] << 8) | p[1] );
  422. }
  423. static inline uint32_t U32_AT( void * _p )
  424. {
  425.     uint8_t * p = (uint8_t *)_p;
  426.     return ( ((uint32_t)p[0] << 24) | ((uint32_t)p[1] << 16)
  427.               | ((uint32_t)p[2] << 8) | p[3] );
  428. }
  429. static inline uint64_t U64_AT( void * _p )
  430. {
  431.     uint8_t * p = (uint8_t *)_p;
  432.     return ( ((uint64_t)p[0] << 56) | ((uint64_t)p[1] << 48)
  433.               | ((uint64_t)p[2] << 40) | ((uint64_t)p[3] << 32)
  434.               | ((uint64_t)p[4] << 24) | ((uint64_t)p[5] << 16)
  435.               | ((uint64_t)p[6] << 8) | p[7] );
  436. }
  437. #if WORDS_BIGENDIAN
  438. #   define hton16(i)   ( i )
  439. #   define hton32(i)   ( i )
  440. #   define hton64(i)   ( i )
  441. #   define ntoh16(i)   ( i )
  442. #   define ntoh32(i)   ( i )
  443. #   define ntoh64(i)   ( i )
  444. #else
  445. #   define hton16(i)   U16_AT(&i)
  446. #   define hton32(i)   U32_AT(&i)
  447. #   define hton64(i)   U64_AT(&i)
  448. #   define ntoh16(i)   U16_AT(&i)
  449. #   define ntoh32(i)   U32_AT(&i)
  450. #   define ntoh64(i)   U64_AT(&i)
  451. #endif
  452.  
  453. /* Format string sanity checks */
  454. #ifdef HAVE_ATTRIBUTE_FORMAT
  455. #   define ATTRIBUTE_FORMAT(x,y) __attribute__ ((format(printf,x,y)))
  456. #else
  457. #   define ATTRIBUTE_FORMAT(x,y)
  458. #endif
  459.  
  460. /* Alignment of critical static data structures */
  461. #ifdef ATTRIBUTE_ALIGNED_MAX
  462. #   define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((ATTRIBUTE_ALIGNED_MAX < align) ? ATTRIBUTE_ALIGNED_MAX : align)))
  463. #else
  464. #   define ATTR_ALIGN(align)
  465. #endif
  466.  
  467. /* Alignment of critical dynamic data structure
  468.  *
  469.  * Not all platforms support memalign so we provide a vlc_memalign wrapper
  470.  * void *vlc_memalign( size_t align, size_t size, void **pp_orig )
  471.  * *pp_orig is the pointer that has to be freed afterwards.
  472.  */
  473. #if 0
  474. #ifdef HAVE_POSIX_MEMALIGN
  475. #   define vlc_memalign(align,size,pp_orig) \
  476.     ( !posix_memalign( pp_orig, align, size ) ? *(pp_orig) : NULL )
  477. #endif
  478. #endif
  479. #ifdef HAVE_MEMALIGN
  480.     /* Some systems have memalign() but no declaration for it */
  481.     void * memalign( size_t align, size_t size );
  482.  
  483. #   define vlc_memalign(pp_orig,align,size) \
  484.     ( *(pp_orig) = memalign( align, size ) )
  485.  
  486. #else /* We don't have any choice but to align manually */
  487. #   define vlc_memalign(pp_orig,align,size) \
  488.     (( *(pp_orig) = malloc( size + align - 1 )) \
  489.         ? (void *)( (((unsigned long)*(pp_orig)) + (unsigned long)(align-1) ) \
  490.                        & (~(unsigned long)(align-1)) ) \
  491.         : NULL )
  492.  
  493. #endif
  494.  
  495. /* Stuff defined in src/extras/libc.c */
  496. #ifndef HAVE_STRDUP
  497. #   define strdup vlc_strdup
  498.     VLC_EXPORT( char *, vlc_strdup, ( const char *s ) );
  499. #elif !defined(__PLUGIN__)
  500. #   define vlc_strdup NULL
  501. #endif
  502.  
  503. #ifndef HAVE_STRNDUP
  504. #   if defined(STRNDUP_IN_GNOME_H) && \
  505.         (defined(MODULE_NAME_IS_gnome)||defined(MODULE_NAME_IS_gnome_main)||\
  506.          defined(MODULE_NAME_IS_gnome2)||defined(MODULE_NAME_IS_gnome2_main))
  507.         /* Do nothing: gnome.h defines strndup for us */
  508. #   else
  509. #       define strndup vlc_strndup
  510.         VLC_EXPORT( char *, vlc_strndup, ( const char *s, size_t n ) );
  511. #   endif
  512. #elif !defined(__PLUGIN__)
  513. #   define vlc_strndup NULL
  514. #endif
  515.  
  516. #ifndef HAVE_ATOF
  517. #   define atof vlc_atof
  518.     VLC_EXPORT( double, vlc_atof, ( const char *nptr ) );
  519. #elif !defined(__PLUGIN__)
  520. #   define vlc_atof NULL
  521. #endif
  522.  
  523. #ifndef HAVE_GETENV
  524. #   define getenv vlc_getenv
  525.     VLC_EXPORT( char *, vlc_getenv, ( const char *name ) );
  526. #elif !defined(__PLUGIN__)
  527. #   define vlc_getenv NULL
  528. #endif
  529.  
  530. #ifndef HAVE_STRCASECMP
  531. #   ifdef HAVE_STRICMP
  532. #       define strcasecmp stricmp
  533. #       define vlc_strcasecmp NULL
  534. #   elif !defined(__PLUGIN__)
  535. #       define strcasecmp vlc_strcasecmp
  536.         VLC_EXPORT( int, vlc_strcasecmp, ( const char *s1, const char *s2 ) );
  537. #   endif
  538. #elif !defined(__PLUGIN__)
  539. #   define vlc_strcasecmp NULL
  540. #endif
  541.  
  542. #ifndef HAVE_STRNCASECMP
  543. #   ifdef HAVE_STRNICMP
  544. #       define strncasecmp strnicmp
  545. #       define vlc_strncasecmp NULL
  546. #   elif !defined(__PLUGIN__)
  547. #       define strncasecmp vlc_strncasecmp
  548.         VLC_EXPORT( int, vlc_strncasecmp, ( const char *s1, const char *s2, size_t n ) );
  549. #   endif
  550. #elif !defined(__PLUGIN__)
  551. #   define vlc_strncasecmp NULL
  552. #endif
  553.  
  554. VLC_EXPORT( char *, vlc_wraptext, ( char *psz_text, size_t i_line ) );
  555.  
  556. /* Format type specifiers for 64 bits numbers */
  557. #if !defined(WIN32) && !defined(UNDER_CE)
  558. #   define I64Fd "%lld"
  559. #   define I64Fi "%lli"
  560. #   define I64Fo "%llo"
  561. #   define I64Fu "%llu"
  562. #   define I64Fx "%llx"
  563. #   define I64FX "%llX"
  564. #else
  565. #   define I64Fd "%I64d"
  566. #   define I64Fi "%I64i"
  567. #   define I64Fo "%I64o"
  568. #   define I64Fu "%I64u"
  569. #   define I64Fx "%I64x"
  570. #   define I64FX "%I64X"
  571. #endif /* defined(WIN32)||defined(UNDER_CE) */
  572.  
  573. /* 64 bits integer constant suffix */
  574. #if !defined(WIN32) && !defined(UNDER_CE)
  575. #   define I64C(x)         x##LL
  576. #else
  577. #   define I64C(x)         x##i64
  578. #endif /* defined(WIN32)||defined(UNDER_CE) */
  579.  
  580. #if defined(WIN32) || defined(UNDER_CE)
  581. /* win32, cl and icl support */
  582. #   if defined( _MSC_VER ) || !defined( __MINGW32__ )
  583. #       define __attribute__(x)
  584. #       define __inline__      __inline
  585. #       define S_IFBLK         0x3000  /* Block */
  586. #       define S_ISBLK(m)      (0)
  587. #       define S_ISCHR(m)      (0)
  588. #       define S_ISFIFO(m)     (((m)&_S_IFMT) == _S_IFIFO)
  589. #       define S_ISREG(m)      (((m)&_S_IFMT) == _S_IFREG)
  590. #   endif
  591.  
  592. /* several type definitions */
  593. #   if defined( __MINGW32__ )
  594. #       if !defined( _OFF_T_ )
  595. typedef long long _off_t;
  596. typedef _off_t off_t;
  597. #           define _OFF_T_
  598. #       else
  599. #           ifdef off_t
  600. #               undef off_t
  601. #           endif
  602. #           define off_t long long
  603. #       endif
  604. #   endif
  605.  
  606. #   if defined( _MSC_VER )
  607. #       if !defined( _OFF_T_DEFINED )
  608. typedef __int64 off_t;
  609. #           define _OFF_T_DEFINED
  610. #       else
  611. #           define off_t __int64
  612. #       endif
  613. #   endif
  614.  
  615. #   if defined( __BORLANDC__ )
  616. #       undef off_t
  617. #       define off_t unsigned __int64
  618. #   endif
  619.  
  620. #   ifndef O_NONBLOCK
  621. #       define O_NONBLOCK 0
  622. #   endif
  623.  
  624. #   ifndef alloca
  625. #       define alloca _alloca
  626. #   endif
  627.  
  628.     /* These two are not defined in mingw32 (bug?) */
  629. #   ifndef snprintf
  630. #       define snprintf _snprintf
  631. #   endif
  632. #   ifndef vsnprintf
  633. #       define vsnprintf _vsnprintf
  634. #   endif
  635.  
  636. #endif
  637.  
  638. /* lseek (defined in src/extras/libc.c) */
  639. #ifndef HAVE_LSEEK
  640. #   define lseek vlc_lseek
  641.     VLC_EXPORT( off_t, vlc_lseek, ( int fildes, off_t offset, int whence ) );
  642. #elif !defined(__PLUGIN__)
  643. #   define vlc_lseek NULL
  644. #endif
  645.  
  646. /*****************************************************************************
  647.  * CPU capabilities
  648.  *****************************************************************************/
  649. #define CPU_CAPABILITY_NONE    0
  650. #define CPU_CAPABILITY_486     (1<<0)
  651. #define CPU_CAPABILITY_586     (1<<1)
  652. #define CPU_CAPABILITY_PPRO    (1<<2)
  653. #define CPU_CAPABILITY_MMX     (1<<3)
  654. #define CPU_CAPABILITY_3DNOW   (1<<4)
  655. #define CPU_CAPABILITY_MMXEXT  (1<<5)
  656. #define CPU_CAPABILITY_SSE     (1<<6)
  657. #define CPU_CAPABILITY_ALTIVEC (1<<16)
  658. #define CPU_CAPABILITY_FPU     (1<<31)
  659.  
  660. /*****************************************************************************
  661.  * I18n stuff
  662.  *****************************************************************************/
  663. VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) );
  664.  
  665. #if defined( ENABLE_NLS ) && \
  666.      (defined(MODULE_NAME_IS_gnome)||defined(MODULE_NAME_IS_gnome_main)||\
  667.       defined(MODULE_NAME_IS_gnome2)||defined(MODULE_NAME_IS_gnome2_main))
  668.     /* Declare nothing: gnome.h will do it for us */
  669. #elif defined( ENABLE_NLS ) && defined( HAVE_INCLUDED_GETTEXT )
  670. #   include "libintl.h"
  671. #   undef _
  672. #if defined( __BORLANDC__ )
  673. #define _(String) vlc_dgettext (PACKAGE_TARNAME, String)
  674. #else
  675. #   define _(String) vlc_dgettext (PACKAGE, String)
  676. #endif
  677. #   define N_(String) ((char*)(String))
  678. #elif defined( ENABLE_NLS ) && defined( HAVE_GETTEXT )
  679. #   include <libintl.h>
  680. #   undef _
  681. #   define _(String) dgettext (PACKAGE, String)
  682. #   define N_(String) ((char*)(String))
  683. #else
  684. #   define _(String) ((char*)(String))
  685. #   define N_(String) ((char*)(String))
  686. #endif
  687.  
  688. /*****************************************************************************
  689.  * Additional vlc stuff
  690.  *****************************************************************************/
  691. #include "vlc_symbols.h"
  692. #include "os_specific.h"
  693. #include "vlc_messages.h"
  694. #include "variables.h"
  695. #include "vlc_objects.h"
  696. #include "vlc_threads_funcs.h"
  697. #include "mtime.h"
  698. #include "modules.h"
  699. #include "main.h"
  700. #include "configuration.h"
  701.  
  702. #if defined( __BORLANDC__ )
  703. #   undef PACKAGE
  704. #   define PACKAGE
  705. #endif
  706.  
  707.